package com.alianzamedica.tools;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * @author Carlos
 * 
 */
public class ValidateTool {

	/**
	 * expresion regular de enteros.
	 */
	public static final String INTEGER_REGEX = "\\d+";

	/**
	 * expresion regular de flotantes.
	 */
	public static final String FLOAT_REGEX = "\\d*\\.?\\d*";

	/**
	 * expresion regular de email.
	 */
	public static final String EMAIL_REGEX = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,4})+$";

	/**
	 * expresion regular de fechas.
	 */
	public static final String DATE_REGEX = "\\d{1,2}/\\d{1,2}/\\d{4}";

	/**
	 * verifica si el string esta vacio o contiene algun valor.
	 * 
	 * @param value
	 *            cadena a analizar.
	 * @return regresa verificacion de si la cadena esta vacia o no.
	 */
	public boolean isStringEmpty(String value) {
		if (value != null && value.trim().length() > 0) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * verifica si la cadena es un numerico.
	 * 
	 * @param value
	 *            si el valor de la cadena es correcto.
	 * @return regresa el resultado de saber si es numerico el valor
	 */
	public boolean isNumeric(String value) {
		Pattern pattern = Pattern.compile(INTEGER_REGEX);
		Matcher matcher = pattern.matcher(value);
		return matcher.matches();
	}

	/**
	 * verifica si es un email.
	 * 
	 * @param value
	 *            valor a ser comparado.
	 * @return error si el valor no es una direccion de email.
	 */
	public boolean isEmail(String value) {
		Pattern pattern = Pattern.compile(EMAIL_REGEX);
		Matcher matcher = pattern.matcher(value);
		return matcher.matches();
	}

	/**
	 * valida una expresion con una expresion regular.
	 * 
	 * @param value
	 *            valor de la expresion a analizar.
	 * @param regex
	 *            expresion regular que valida.
	 * @return resultado si la evaluacion es satisfactoria.
	 */
	public boolean validate(String value, String regex) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(value);
		return matcher.matches();

	}

	/**
	 * comprueba si es el formato de fecha.
	 * 
	 * @param value
	 *            valor de la fecha.
	 * @return booleano indicando que es una fecha valida.
	 */
	public boolean isDate(String value) {
		Pattern pattern = Pattern.compile(DATE_REGEX);
		Matcher matcher = pattern.matcher(value);
		return matcher.matches();
	}

	/**
	 * verifica si es flotante.
	 * 
	 * @param value
	 *            valor de cadena a validad
	 * @return indicador de flotante.
	 */
	public boolean isFloat(String value) {
		Pattern pattern = Pattern.compile(FLOAT_REGEX);
		Matcher matcher = pattern.matcher(value);
		return matcher.matches();
	}

	/*
	 * public static void main(String args[]){ String value = "02/20/2009";
	 * String regex = "\\d{1,2}/\\d{1,2}/\\d{4}"; Pattern pattern =
	 * Pattern.compile(regex); Matcher matcher = pattern.matcher(value);
	 * if(matcher.matches()){ System.out.println("es una fecha valida"); }else{
	 * System.out.println("no es una fecha valida"); } }
	 */

}
